package com.ztstkj.lzservices.utils

class ScaleStabilityChecker(
    private val windowSize: Int = 5,      // 采样窗口大小（建议5-10次）
    private val threshold: Float = 0.1f   // 允许波动阈值（单位：克/千克）
) {
    private val readings = ArrayDeque<Float>()

    /**
     * 输入新读数，返回是否稳定及稳定值
     */
    fun checkStability(newValue: Float): Pair<Boolean, Float?> {
        // 维护固定长度的采样窗口
        if (readings.size >= windowSize) {
            readings.removeFirst()
        }
        readings.addLast(newValue)

        // 计算窗口内数据的波动范围
        val max = readings.maxOrNull() ?: 0f
        val min = readings.minOrNull() ?: 0f
        val deviation = max - min

        // 判断是否稳定
        return if (readings.size == windowSize && deviation <= threshold) {
            true to readings.average().toFloat() // 返回稳定状态和平均值
        } else {
            false to null
        }
    }
}
